package com.demo.java.OD1_50.OD28;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最小施肥机能效】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145538147
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int numFields = scanner.nextInt();  // 田地数量
        int numCows = scanner.nextInt();    // 牛的数量
        int[] fieldSizes = new int[numFields];  // 存储每块田地的大小

        // 输入田地的大小
        for (int i = 0; i < numFields; i++) {
            fieldSizes[i] = scanner.nextInt();
        }

        // 二分查找的左右边界
        int left = 1;
        int right = Arrays.stream(fieldSizes).max().orElse(0);

        // 二分查找
        while (left < right) {
            int mid = (left + right) / 2;
            int numGroups = 0;

            // 计算所需的牛的数量
            for (int i = 0; i < fieldSizes.length; i++) {
                numGroups += (fieldSizes[i] + mid - 1) / mid;  // 计算田地 i 需要的牛的数量
            }

            // 如果牛的数量足够，则缩小区间，寻找更小的最大工作量
            if (numGroups <= numCows) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }

        // 计算最终牛的数量
        int numGroups = 0;
        for (int i = 0; i < fieldSizes.length; i++) {
            numGroups += (fieldSizes[i] + left - 1) / left;  // 计算田地 i 需要的牛的数量
        }

        // 如果牛的数量大于给定数量，则返回 -1
        System.out.println(numGroups <= numCows ? left : -1);
    }
}